// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
// an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by google-apis-code-generator 1.5.1
//     C# generator version: 1.22.0
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

/**
 * \brief
 *   Google Spectrum Database API Version v1explorer
 *
 * \section ApiInfo API Version Information
 *    <table>
 *      <tr><th>API
 *          <td><a href='http://developers.google.com/spectrum'>Google Spectrum Database API</a>
 *      <tr><th>API Version<td>v1explorer
 *      <tr><th>API Rev<td>20170306 (795)
 *      <tr><th>API Docs
 *          <td><a href='http://developers.google.com/spectrum'>
 *              http://developers.google.com/spectrum</a>
 *      <tr><th>Discovery Name<td>spectrum
 *    </table>
 *
 * \section ForMoreInfo For More Information
 *
 * The complete API documentation for using Google Spectrum Database API can be found at
 * <a href='http://developers.google.com/spectrum'>http://developers.google.com/spectrum</a>.
 *
 * For more information about the Google APIs Client Library for .NET, see
 * <a href='https://developers.google.com/api-client-library/dotnet/get_started'>
 * https://developers.google.com/api-client-library/dotnet/get_started</a>
 */

namespace Google.Apis.Spectrum.v1explorer
{
    /// <summary>The Spectrum Service.</summary>
    public class SpectrumService : Google.Apis.Services.BaseClientService
    {
        /// <summary>The API version.</summary>
        public const string Version = "v1explorer";

        /// <summary>The discovery version used to generate this service.</summary>
        public static Google.Apis.Discovery.DiscoveryVersion DiscoveryVersionUsed =
            Google.Apis.Discovery.DiscoveryVersion.Version_1_0;

        /// <summary>Constructs a new service.</summary>
        public SpectrumService() :
            this(new Google.Apis.Services.BaseClientService.Initializer()) {}

        /// <summary>Constructs a new service.</summary>
        /// <param name="initializer">The service initializer.</param>
        public SpectrumService(Google.Apis.Services.BaseClientService.Initializer initializer)
            : base(initializer)
        {
            paws = new PawsResource(this);
        }

        /// <summary>Gets the service supported features.</summary>
        public override System.Collections.Generic.IList<string> Features
        {
            get { return new string[0]; }
        }

        /// <summary>Gets the service name.</summary>
        public override string Name
        {
            get { return "spectrum"; }
        }

        /// <summary>Gets the service base URI.</summary>
        public override string BaseUri
        {
            get { return "https://www.googleapis.com/spectrum/v1explorer/paws/"; }
        }

        /// <summary>Gets the service base path.</summary>
        public override string BasePath
        {
            get { return "spectrum/v1explorer/paws/"; }
        }





        private readonly PawsResource paws;

        /// <summary>Gets the Paws resource.</summary>
        public virtual PawsResource Paws
        {
            get { return paws; }
        }
    }

    ///<summary>A base abstract class for Spectrum requests.</summary>
    public abstract class SpectrumBaseServiceRequest<TResponse> : Google.Apis.Requests.ClientServiceRequest<TResponse>
    {
        ///<summary>Constructs a new SpectrumBaseServiceRequest instance.</summary>
        protected SpectrumBaseServiceRequest(Google.Apis.Services.IClientService service)
            : base(service)
        {
        }

        /// <summary>Data format for the response.</summary>
        /// [default: json]
        [Google.Apis.Util.RequestParameterAttribute("alt", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<AltEnum> Alt { get; set; }

        /// <summary>Data format for the response.</summary>
        public enum AltEnum
        {
            /// <summary>Responses with Content-Type of text/csv</summary>
            [Google.Apis.Util.StringValueAttribute("csv")]
            Csv,
            /// <summary>Responses with Content-Type of application/json</summary>
            [Google.Apis.Util.StringValueAttribute("json")]
            Json,
        }

        /// <summary>Selector specifying which fields to include in a partial response.</summary>
        [Google.Apis.Util.RequestParameterAttribute("fields", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Fields { get; set; }

        /// <summary>API key. Your API key identifies your project and provides you with API access, quota, and reports.
        /// Required unless you provide an OAuth 2.0 token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("key", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Key { get; set; }

        /// <summary>OAuth 2.0 token for the current user.</summary>
        [Google.Apis.Util.RequestParameterAttribute("oauth_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string OauthToken { get; set; }

        /// <summary>Returns response with indentations and line breaks.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("prettyPrint", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> PrettyPrint { get; set; }

        /// <summary>Available to use for quota purposes for server-side applications. Can be any arbitrary string
        /// assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.</summary>
        [Google.Apis.Util.RequestParameterAttribute("quotaUser", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string QuotaUser { get; set; }

        /// <summary>IP address of the site where the request originates. Use this if you want to enforce per-user
        /// limits.</summary>
        [Google.Apis.Util.RequestParameterAttribute("userIp", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UserIp { get; set; }

        /// <summary>Initializes Spectrum parameter list.</summary>
        protected override void InitParameters()
        {
            base.InitParameters();

            RequestParameters.Add(
                "alt", new Google.Apis.Discovery.Parameter
                {
                    Name = "alt",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "json",
                    Pattern = null,
                });
            RequestParameters.Add(
                "fields", new Google.Apis.Discovery.Parameter
                {
                    Name = "fields",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "key", new Google.Apis.Discovery.Parameter
                {
                    Name = "key",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "oauth_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "oauth_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "prettyPrint", new Google.Apis.Discovery.Parameter
                {
                    Name = "prettyPrint",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "quotaUser", new Google.Apis.Discovery.Parameter
                {
                    Name = "quotaUser",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "userIp", new Google.Apis.Discovery.Parameter
                {
                    Name = "userIp",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
        }
    }

    /// <summary>The "paws" collection of methods.</summary>
    public class PawsResource
    {
        private const string Resource = "paws";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public PawsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Requests information about the available spectrum for a device at a location. Requests from a
        /// fixed-mode device must include owner information so the device can be registered with the
        /// database.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual GetSpectrumRequest GetSpectrum(Google.Apis.Spectrum.v1explorer.Data.PawsGetSpectrumRequest body)
        {
            return new GetSpectrumRequest(service, body);
        }

        /// <summary>Requests information about the available spectrum for a device at a location. Requests from a
        /// fixed-mode device must include owner information so the device can be registered with the
        /// database.</summary>
        public class GetSpectrumRequest : SpectrumBaseServiceRequest<Google.Apis.Spectrum.v1explorer.Data.PawsGetSpectrumResponse>
        {
            /// <summary>Constructs a new GetSpectrum request.</summary>
            public GetSpectrumRequest(Google.Apis.Services.IClientService service, Google.Apis.Spectrum.v1explorer.Data.PawsGetSpectrumRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Spectrum.v1explorer.Data.PawsGetSpectrumRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "getSpectrum"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "getSpectrum"; }
            }

            /// <summary>Initializes GetSpectrum parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>The Google Spectrum Database does not support batch requests, so this method always yields an
        /// UNIMPLEMENTED error.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual GetSpectrumBatchRequest GetSpectrumBatch(Google.Apis.Spectrum.v1explorer.Data.PawsGetSpectrumBatchRequest body)
        {
            return new GetSpectrumBatchRequest(service, body);
        }

        /// <summary>The Google Spectrum Database does not support batch requests, so this method always yields an
        /// UNIMPLEMENTED error.</summary>
        public class GetSpectrumBatchRequest : SpectrumBaseServiceRequest<Google.Apis.Spectrum.v1explorer.Data.PawsGetSpectrumBatchResponse>
        {
            /// <summary>Constructs a new GetSpectrumBatch request.</summary>
            public GetSpectrumBatchRequest(Google.Apis.Services.IClientService service, Google.Apis.Spectrum.v1explorer.Data.PawsGetSpectrumBatchRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Spectrum.v1explorer.Data.PawsGetSpectrumBatchRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "getSpectrumBatch"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "getSpectrumBatch"; }
            }

            /// <summary>Initializes GetSpectrumBatch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Initializes the connection between a white space device and the database.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual InitRequest Init(Google.Apis.Spectrum.v1explorer.Data.PawsInitRequest body)
        {
            return new InitRequest(service, body);
        }

        /// <summary>Initializes the connection between a white space device and the database.</summary>
        public class InitRequest : SpectrumBaseServiceRequest<Google.Apis.Spectrum.v1explorer.Data.PawsInitResponse>
        {
            /// <summary>Constructs a new Init request.</summary>
            public InitRequest(Google.Apis.Services.IClientService service, Google.Apis.Spectrum.v1explorer.Data.PawsInitRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Spectrum.v1explorer.Data.PawsInitRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "init"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "init"; }
            }

            /// <summary>Initializes Init parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Notifies the database that the device has selected certain frequency ranges for transmission. Only
        /// to be invoked when required by the regulator. The Google Spectrum Database does not operate in domains that
        /// require notification, so this always yields an UNIMPLEMENTED error.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual NotifySpectrumUseRequest NotifySpectrumUse(Google.Apis.Spectrum.v1explorer.Data.PawsNotifySpectrumUseRequest body)
        {
            return new NotifySpectrumUseRequest(service, body);
        }

        /// <summary>Notifies the database that the device has selected certain frequency ranges for transmission. Only
        /// to be invoked when required by the regulator. The Google Spectrum Database does not operate in domains that
        /// require notification, so this always yields an UNIMPLEMENTED error.</summary>
        public class NotifySpectrumUseRequest : SpectrumBaseServiceRequest<Google.Apis.Spectrum.v1explorer.Data.PawsNotifySpectrumUseResponse>
        {
            /// <summary>Constructs a new NotifySpectrumUse request.</summary>
            public NotifySpectrumUseRequest(Google.Apis.Services.IClientService service, Google.Apis.Spectrum.v1explorer.Data.PawsNotifySpectrumUseRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Spectrum.v1explorer.Data.PawsNotifySpectrumUseRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "notifySpectrumUse"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "notifySpectrumUse"; }
            }

            /// <summary>Initializes NotifySpectrumUse parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>The Google Spectrum Database implements registration in the getSpectrum method. As such this always
        /// returns an UNIMPLEMENTED error.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual RegisterRequest Register(Google.Apis.Spectrum.v1explorer.Data.PawsRegisterRequest body)
        {
            return new RegisterRequest(service, body);
        }

        /// <summary>The Google Spectrum Database implements registration in the getSpectrum method. As such this always
        /// returns an UNIMPLEMENTED error.</summary>
        public class RegisterRequest : SpectrumBaseServiceRequest<Google.Apis.Spectrum.v1explorer.Data.PawsRegisterResponse>
        {
            /// <summary>Constructs a new Register request.</summary>
            public RegisterRequest(Google.Apis.Services.IClientService service, Google.Apis.Spectrum.v1explorer.Data.PawsRegisterRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Spectrum.v1explorer.Data.PawsRegisterRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "register"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "register"; }
            }

            /// <summary>Initializes Register parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Validates a device for white space use in accordance with regulatory rules. The Google Spectrum
        /// Database does not support master/slave configurations, so this always yields an UNIMPLEMENTED
        /// error.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual VerifyDeviceRequest VerifyDevice(Google.Apis.Spectrum.v1explorer.Data.PawsVerifyDeviceRequest body)
        {
            return new VerifyDeviceRequest(service, body);
        }

        /// <summary>Validates a device for white space use in accordance with regulatory rules. The Google Spectrum
        /// Database does not support master/slave configurations, so this always yields an UNIMPLEMENTED
        /// error.</summary>
        public class VerifyDeviceRequest : SpectrumBaseServiceRequest<Google.Apis.Spectrum.v1explorer.Data.PawsVerifyDeviceResponse>
        {
            /// <summary>Constructs a new VerifyDevice request.</summary>
            public VerifyDeviceRequest(Google.Apis.Services.IClientService service, Google.Apis.Spectrum.v1explorer.Data.PawsVerifyDeviceRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Spectrum.v1explorer.Data.PawsVerifyDeviceRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "verifyDevice"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "verifyDevice"; }
            }

            /// <summary>Initializes VerifyDevice parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }
    }
}

namespace Google.Apis.Spectrum.v1explorer.Data
{    

    /// <summary>Antenna characteristics provide additional information, such as the antenna height, antenna type, etc.
    /// Whether antenna characteristics must be provided in a request depends on the device type and regulatory
    /// domain.</summary>
    public class AntennaCharacteristics : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The antenna height in meters. Whether the antenna height is required depends on the device type and
        /// the regulatory domain. Note that the height may be negative.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("height")]
        public virtual System.Nullable<double> Height { get; set; } 

        /// <summary>If the height is required, then the height type (AGL for above ground level or AMSL for above mean
        /// sea level) is also required. The default is AGL.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("heightType")]
        public virtual string HeightType { get; set; } 

        /// <summary>The height uncertainty in meters. Whether this is required depends on the regulatory
        /// domain.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("heightUncertainty")]
        public virtual System.Nullable<double> HeightUncertainty { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>This message contains the name and URI of a database.</summary>
    public class DatabaseSpec : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The display name for a database.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The corresponding URI of the database.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("uri")]
        public virtual string Uri { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>This message is provided by the database to notify devices of an upcoming change to the database
    /// URI.</summary>
    public class DbUpdateSpec : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A required list of one or more databases. A device should update its preconfigured list of
        /// databases to replace (only) the database that provided the response with the specified entries.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("databases")]
        public virtual System.Collections.Generic.IList<DatabaseSpec> Databases { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Device capabilities provide additional information that may be used by a device to provide additional
    /// information to the database that may help it to determine available spectrum. If the database does not support
    /// device capabilities it will ignore the parameter altogether.</summary>
    public class DeviceCapabilities : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>An optional list of frequency ranges supported by the device. Each element must contain start and
        /// stop frequencies in which the device can operate. Channel identifiers are optional. When specified, the
        /// database should not return available spectrum that falls outside these ranges or channel IDs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("frequencyRanges")]
        public virtual System.Collections.Generic.IList<FrequencyRange> FrequencyRanges { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The device descriptor contains parameters that identify the specific device, such as its manufacturer
    /// serial number, regulatory-specific identifier (e.g., FCC ID), and any other device characteristics required by
    /// regulatory domains.</summary>
    public class DeviceDescriptor : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Specifies the ETSI white space device category. Valid values are the strings master and slave. This
        /// field is case-insensitive. Consult the ETSI documentation for details about the device types.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etsiEnDeviceCategory")]
        public virtual string EtsiEnDeviceCategory { get; set; } 

        /// <summary>Specifies the ETSI white space device emissions class. The values are represented by numeric
        /// strings, such as 1, 2, etc. Consult the ETSI documentation for details about the device types.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etsiEnDeviceEmissionsClass")]
        public virtual string EtsiEnDeviceEmissionsClass { get; set; } 

        /// <summary>Specifies the ETSI white space device type. Valid values are single-letter strings, such as A, B,
        /// etc. Consult the ETSI documentation for details about the device types.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etsiEnDeviceType")]
        public virtual string EtsiEnDeviceType { get; set; } 

        /// <summary>Specifies the ETSI white space device technology identifier. The string value must not exceed 64
        /// characters in length. Consult the ETSI documentation for details about the device types.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etsiEnTechnologyId")]
        public virtual string EtsiEnTechnologyId { get; set; } 

        /// <summary>Specifies the device's FCC certification identifier. The value is an identifier string whose length
        /// should not exceed 32 characters. Note that, in practice, a valid FCC ID may be limited to 19
        /// characters.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fccId")]
        public virtual string FccId { get; set; } 

        /// <summary>Specifies the TV Band White Space device type, as defined by the FCC. Valid values are FIXED,
        /// MODE_1, MODE_2.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fccTvbdDeviceType")]
        public virtual string FccTvbdDeviceType { get; set; } 

        /// <summary>The manufacturer's ID may be required by the regulatory domain. This should represent the name of
        /// the device manufacturer, should be consistent across all devices from the same manufacturer, and should be
        /// distinct from that of other manufacturers. The string value must not exceed 64 characters in
        /// length.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("manufacturerId")]
        public virtual string ManufacturerId { get; set; } 

        /// <summary>The device's model ID may be required by the regulatory domain. The string value must not exceed 64
        /// characters in length.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("modelId")]
        public virtual string ModelId { get; set; } 

        /// <summary>The list of identifiers for rulesets supported by the device. A database may require that the
        /// device provide this list before servicing the device requests. If the database does not support any of the
        /// rulesets specified in the list, the database may refuse to service the device requests. If present, the list
        /// must contain at least one entry.
        ///
        /// For information about the valid requests, see section 9.2 of the PAWS specification. Currently,
        /// FccTvBandWhiteSpace-2010 is the only supported ruleset.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rulesetIds")]
        public virtual System.Collections.Generic.IList<string> RulesetIds { get; set; } 

        /// <summary>The manufacturer's device serial number; required by the applicable regulatory domain. The length
        /// of the value must not exceed 64 characters.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("serialNumber")]
        public virtual string SerialNumber { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>This parameter contains device-owner information required as part of device registration. The
    /// regulatory domains may require additional parameters.
    ///
    /// All contact information must be expressed using the structure defined by the vCard format specification. Only
    /// the contact fields of vCard are supported: - fn: Full name of an individual - org: Name of the organization -
    /// adr: Address fields - tel: Telephone numbers - email: Email addresses
    ///
    /// Note that the vCard specification defines maximum lengths for each field.</summary>
    public class DeviceOwner : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The vCard contact information for the device operator is optional, but may be required by specific
        /// regulatory domains.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("operator")]
        public virtual Vcard Operator__ { get; set; } 

        /// <summary>The vCard contact information for the individual or business that owns the device is
        /// required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("owner")]
        public virtual Vcard Owner { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The device validity element describes whether a particular device is valid to operate in the regulatory
    /// domain.</summary>
    public class DeviceValidity : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The descriptor of the device for which the validity check was requested. It will always be
        /// present.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deviceDesc")]
        public virtual DeviceDescriptor DeviceDesc { get; set; } 

        /// <summary>The validity status: true if the device is valid for operation, false otherwise. It will always be
        /// present.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("isValid")]
        public virtual System.Nullable<bool> IsValid { get; set; } 

        /// <summary>If the device identifier is not valid, the database may include a reason. The reason may be in any
        /// language. The length of the value should not exceed 128 characters.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("reason")]
        public virtual string Reason { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The start and stop times of an event. This is used to indicate the time period for which a spectrum
    /// profile is valid.
    ///
    /// Both times are expressed using the format, YYYY-MM-DDThh:mm:ssZ, as defined in RFC3339. The times must be
    /// expressed using UTC.</summary>
    public class EventTime : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The inclusive start of the event. It will be present.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("startTime")]
        public virtual string StartTime { get; set; } 

        /// <summary>The exclusive end of the event. It will be present.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("stopTime")]
        public virtual string StopTime { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A specific range of frequencies together with the associated maximum power level and channel
    /// identifier.</summary>
    public class FrequencyRange : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The database may include a channel identifier, when applicable. When it is included, the device
        /// should treat it as informative. The length of the identifier should not exceed 16 characters.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("channelId")]
        public virtual string ChannelId { get; set; } 

        /// <summary>The maximum total power level (EIRP)—computed over the corresponding operating bandwidth—that is
        /// permitted within the frequency range. Depending on the context in which the frequency-range element appears,
        /// this value may be required. For example, it is required in the available-spectrum response, available-
        /// spectrum-batch response, and spectrum-use notification message, but it should not be present (it is not
        /// applicable) when the frequency range appears inside a device-capabilities message.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxPowerDBm")]
        public virtual System.Nullable<double> MaxPowerDBm { get; set; } 

        /// <summary>The required inclusive start of the frequency range (in Hertz).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("startHz")]
        public virtual System.Nullable<double> StartHz { get; set; } 

        /// <summary>The required exclusive end of the frequency range (in Hertz).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("stopHz")]
        public virtual System.Nullable<double> StopHz { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>This parameter is used to specify the geolocation of the device.</summary>
    public class GeoLocation : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The location confidence level, as an integer percentage, may be required, depending on the
        /// regulatory domain. When the parameter is optional and not provided, its value is assumed to be 95. Valid
        /// values range from 0 to 99, since, in practice, 100-percent confidence is not achievable. The confidence
        /// value is meaningful only when geolocation refers to a point with uncertainty.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("confidence")]
        public virtual System.Nullable<int> Confidence { get; set; } 

        /// <summary>If present, indicates that the geolocation represents a point. Paradoxically, a point is
        /// parameterized using an ellipse, where the center represents the location of the point and the distances
        /// along the major and minor axes represent the uncertainty. The uncertainty values may be required, depending
        /// on the regulatory domain.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("point")]
        public virtual GeoLocationEllipse Point { get; set; } 

        /// <summary>If present, indicates that the geolocation represents a region. Database support for regions is
        /// optional.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("region")]
        public virtual GeoLocationPolygon Region { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A "point" with uncertainty is represented using the Ellipse shape.</summary>
    public class GeoLocationEllipse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A required geo-spatial point representing the center of the ellipse.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("center")]
        public virtual GeoLocationPoint Center { get; set; } 

        /// <summary>A floating-point number that expresses the orientation of the ellipse, representing the rotation,
        /// in degrees, of the semi-major axis from North towards the East. For example, when the uncertainty is
        /// greatest along the North-South direction, orientation is 0 degrees; conversely, if the uncertainty is
        /// greatest along the East-West direction, orientation is 90 degrees. When orientation is not present, the
        /// orientation is assumed to be 0.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("orientation")]
        public virtual System.Nullable<double> Orientation { get; set; } 

        /// <summary>A floating-point number that expresses the location uncertainty along the major axis of the
        /// ellipse. May be required by the regulatory domain. When the uncertainty is optional, the default value is
        /// 0.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("semiMajorAxis")]
        public virtual System.Nullable<double> SemiMajorAxis { get; set; } 

        /// <summary>A floating-point number that expresses the location uncertainty along the minor axis of the
        /// ellipse. May be required by the regulatory domain. When the uncertainty is optional, the default value is
        /// 0.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("semiMinorAxis")]
        public virtual System.Nullable<double> SemiMinorAxis { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A single geolocation on the globe.</summary>
    public class GeoLocationPoint : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A required floating-point number that expresses the latitude in degrees using the WGS84 datum. For
        /// details on this encoding, see the National Imagery and Mapping Agency's Technical Report TR8350.2.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("latitude")]
        public virtual System.Nullable<double> Latitude { get; set; } 

        /// <summary>A required floating-point number that expresses the longitude in degrees using the WGS84 datum. For
        /// details on this encoding, see the National Imagery and Mapping Agency's Technical Report TR8350.2.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("longitude")]
        public virtual System.Nullable<double> Longitude { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A region is represented using the polygonal shape.</summary>
    public class GeoLocationPolygon : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>When the geolocation describes a region, the exterior field refers to a list of latitude/longitude
        /// points that represent the vertices of a polygon. The first and last points must be the same. Thus, a minimum
        /// of four points is required. The following polygon restrictions from RFC5491 apply: - A connecting line shall
        /// not cross another connecting line of the same polygon. - The vertices must be defined in a counterclockwise
        /// order. - The edges of a polygon are defined by the shortest path between two points in space (not a geodesic
        /// curve). Consequently, the length between two adjacent vertices should be restricted to a maximum of 130 km.
        /// - All vertices are assumed to be at the same altitude. - Polygon shapes should be restricted to a maximum of
        /// 15 vertices (16 points that include the repeated vertex).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("exterior")]
        public virtual System.Collections.Generic.IList<GeoLocationPoint> Exterior { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The schedule of spectrum profiles available at a particular geolocation.</summary>
    public class GeoSpectrumSchedule : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The geolocation identifies the location at which the spectrum schedule applies. It will always be
        /// present.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("location")]
        public virtual GeoLocation Location { get; set; } 

        /// <summary>A list of available spectrum profiles and associated times. It will always be present, and at least
        /// one schedule must be included (though it may be empty if there is no available spectrum). More than one
        /// schedule may be included to represent future changes to the available spectrum.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("spectrumSchedules")]
        public virtual System.Collections.Generic.IList<SpectrumSchedule> SpectrumSchedules { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The request message for a batch available spectrum query protocol.</summary>
    public class PawsGetSpectrumBatchRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Depending on device type and regulatory domain, antenna characteristics may be required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("antenna")]
        public virtual AntennaCharacteristics Antenna { get; set; } 

        /// <summary>The master device may include its device capabilities to limit the available-spectrum batch
        /// response to the spectrum that is compatible with its capabilities. The database should not return spectrum
        /// that is incompatible with the specified capabilities.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("capabilities")]
        public virtual DeviceCapabilities Capabilities { get; set; } 

        /// <summary>When the available spectrum request is made on behalf of a specific device (a master or slave
        /// device), device descriptor information for the device on whose behalf the request is made is required (in
        /// such cases, the requestType parameter must be empty). When a requestType value is specified, device
        /// descriptor information may be optional or required according to the rules of the applicable regulatory
        /// domain.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deviceDesc")]
        public virtual DeviceDescriptor DeviceDesc { get; set; } 

        /// <summary>A geolocation list is required. This allows a device to specify its current location plus
        /// additional anticipated locations when allowed by the regulatory domain. At least one location must be
        /// included. Geolocation must be given as the location of the radiation center of the device's antenna. If a
        /// location specifies a region, rather than a point, the database may return an UNIMPLEMENTED error if it does
        /// not support query by region.
        ///
        /// There is no upper limit on the number of locations included in a available spectrum batch request, but the
        /// database may restrict the number of locations it supports by returning a response with fewer locations than
        /// specified in the batch request. Note that geolocations must be those of the master device (a device with
        /// geolocation capability that makes an available spectrum batch request), whether the master device is making
        /// the request on its own behalf or on behalf of a slave device (one without geolocation capability).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("locations")]
        public virtual System.Collections.Generic.IList<GeoLocation> Locations { get; set; } 

        /// <summary>When an available spectrum batch request is made by the master device (a device with geolocation
        /// capability) on behalf of a slave device (a device without geolocation capability), the rules of the
        /// applicable regulatory domain may require the master device to provide its own device descriptor information
        /// (in addition to device descriptor information for the slave device in a separate parameter).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("masterDeviceDesc")]
        public virtual DeviceDescriptor MasterDeviceDesc { get; set; } 

        /// <summary>Depending on device type and regulatory domain, device owner information may be included in an
        /// available spectrum batch request. This allows the device to register and get spectrum-availability
        /// information in a single request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("owner")]
        public virtual DeviceOwner Owner { get; set; } 

        /// <summary>The request type parameter is an optional parameter that can be used to modify an available
        /// spectrum batch request, but its use depends on applicable regulatory rules. For example, It may be used to
        /// request generic slave device parameters without having to specify the device descriptor for a specific
        /// device. When the requestType parameter is missing, the request is for a specific device (master or slave),
        /// and the device descriptor parameter for the device on whose behalf the batch request is made is
        /// required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("requestType")]
        public virtual string RequestType { get; set; } 

        /// <summary>The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).
        ///
        /// Required field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The PAWS version. Must be exactly 1.0.
        ///
        /// Required field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("version")]
        public virtual string Version { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The response message for the batch available spectrum query contains a schedule of available spectrum
    /// for the device at multiple locations.</summary>
    public class PawsGetSpectrumBatchResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A database may include the databaseChange parameter to notify a device of a change to its database
        /// URI, providing one or more alternate database URIs. The device should use this information to update its
        /// list of pre-configured databases by (only) replacing its entry for the responding database with the list of
        /// alternate URIs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("databaseChange")]
        public virtual DbUpdateSpec DatabaseChange { get; set; } 

        /// <summary>The database must return in its available spectrum response the device descriptor information it
        /// received in the master device's available spectrum batch request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deviceDesc")]
        public virtual DeviceDescriptor DeviceDesc { get; set; } 

        /// <summary>The available spectrum batch response must contain a geo-spectrum schedule list, The list may be
        /// empty if spectrum is not available. The database may return more than one geo-spectrum schedule to represent
        /// future changes to the available spectrum. How far in advance a schedule may be provided depends upon the
        /// applicable regulatory domain. The database may return available spectrum for fewer geolocations than
        /// requested. The device must not make assumptions about the order of the entries in the list, and must use the
        /// geolocation value in each geo-spectrum schedule entry to match available spectrum to a location.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("geoSpectrumSchedules")]
        public virtual System.Collections.Generic.IList<GeoSpectrumSchedule> GeoSpectrumSchedules { get; set; } 

        /// <summary>Identifies what kind of resource this is. Value: the fixed string
        /// "spectrum#pawsGetSpectrumBatchResponse".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The database may return a constraint on the allowed maximum contiguous bandwidth (in Hertz). A
        /// regulatory domain may require the database to return this parameter. When this parameter is present in the
        /// response, the device must apply this constraint to its spectrum-selection logic to ensure that no single
        /// block of spectrum has bandwidth that exceeds this value.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxContiguousBwHz")]
        public virtual System.Nullable<double> MaxContiguousBwHz { get; set; } 

        /// <summary>The database may return a constraint on the allowed maximum total bandwidth (in Hertz), which does
        /// not need to be contiguous. A regulatory domain may require the database to return this parameter. When this
        /// parameter is present in the available spectrum batch response, the device must apply this constraint to its
        /// spectrum-selection logic to ensure that total bandwidth does not exceed this value.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxTotalBwHz")]
        public virtual System.Nullable<double> MaxTotalBwHz { get; set; } 

        /// <summary>For regulatory domains that require a spectrum-usage report from devices, the database must return
        /// true for this parameter if the geo-spectrum schedules list is not empty; otherwise, the database should
        /// either return false or omit this parameter. If this parameter is present and its value is true, the device
        /// must send a spectrum use notify message to the database; otherwise, the device should not send the
        /// notification.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("needsSpectrumReport")]
        public virtual System.Nullable<bool> NeedsSpectrumReport { get; set; } 

        /// <summary>The database should return ruleset information, which identifies the applicable regulatory
        /// authority and ruleset for the available spectrum batch response. If included, the device must use the
        /// corresponding ruleset to interpret the response. Values provided in the returned ruleset information, such
        /// as maxLocationChange, take precedence over any conflicting values provided in the ruleset information
        /// returned in a prior initialization response sent by the database to the device.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rulesetInfo")]
        public virtual RulesetInfo RulesetInfo { get; set; } 

        /// <summary>The database includes a timestamp of the form, YYYY-MM-DDThh:mm:ssZ (Internet timestamp format per
        /// RFC3339), in its available spectrum batch response. The timestamp should be used by the device as a
        /// reference for the start and stop times specified in the response spectrum schedules.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("timestamp")]
        public virtual string Timestamp { get; set; } 

        /// <summary>The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).
        ///
        /// Required field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The PAWS version. Must be exactly 1.0.
        ///
        /// Required field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("version")]
        public virtual string Version { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The request message for the available spectrum query protocol which must include the device's
    /// geolocation.</summary>
    public class PawsGetSpectrumRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Depending on device type and regulatory domain, the characteristics of the antenna may be
        /// required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("antenna")]
        public virtual AntennaCharacteristics Antenna { get; set; } 

        /// <summary>The master device may include its device capabilities to limit the available-spectrum response to
        /// the spectrum that is compatible with its capabilities. The database should not return spectrum that is
        /// incompatible with the specified capabilities.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("capabilities")]
        public virtual DeviceCapabilities Capabilities { get; set; } 

        /// <summary>When the available spectrum request is made on behalf of a specific device (a master or slave
        /// device), device descriptor information for that device is required (in such cases, the requestType parameter
        /// must be empty). When a requestType value is specified, device descriptor information may be optional or
        /// required according to the rules of the applicable regulatory domain.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deviceDesc")]
        public virtual DeviceDescriptor DeviceDesc { get; set; } 

        /// <summary>The geolocation of the master device (a device with geolocation capability that makes an available
        /// spectrum request) is required whether the master device is making the request on its own behalf or on behalf
        /// of a slave device (one without geolocation capability). The location must be the location of the radiation
        /// center of the master device's antenna. To support mobile devices, a regulatory domain may allow the
        /// anticipated position of the master device to be given instead. If the location specifies a region, rather
        /// than a point, the database may return an UNIMPLEMENTED error code if it does not support query by
        /// region.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("location")]
        public virtual GeoLocation Location { get; set; } 

        /// <summary>When an available spectrum request is made by the master device (a device with geolocation
        /// capability) on behalf of a slave device (a device without geolocation capability), the rules of the
        /// applicable regulatory domain may require the master device to provide its own device descriptor information
        /// (in addition to device descriptor information for the slave device, which is provided in a separate
        /// parameter).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("masterDeviceDesc")]
        public virtual DeviceDescriptor MasterDeviceDesc { get; set; } 

        /// <summary>Depending on device type and regulatory domain, device owner information may be included in an
        /// available spectrum request. This allows the device to register and get spectrum-availability information in
        /// a single request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("owner")]
        public virtual DeviceOwner Owner { get; set; } 

        /// <summary>The request type parameter is an optional parameter that can be used to modify an available
        /// spectrum request, but its use depends on applicable regulatory rules. It may be used, for example, to
        /// request generic slave device parameters without having to specify the device descriptor for a specific
        /// device. When the requestType parameter is missing, the request is for a specific device (master or slave),
        /// and the deviceDesc parameter for the device on whose behalf the request is made is required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("requestType")]
        public virtual string RequestType { get; set; } 

        /// <summary>The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).
        ///
        /// Required field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The PAWS version. Must be exactly 1.0.
        ///
        /// Required field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("version")]
        public virtual string Version { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The response message for the available spectrum query which contains a schedule of available spectrum
    /// for the device.</summary>
    public class PawsGetSpectrumResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A database may include the databaseChange parameter to notify a device of a change to its database
        /// URI, providing one or more alternate database URIs. The device should use this information to update its
        /// list of pre-configured databases by (only) replacing its entry for the responding database with the list of
        /// alternate URIs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("databaseChange")]
        public virtual DbUpdateSpec DatabaseChange { get; set; } 

        /// <summary>The database must return, in its available spectrum response, the device descriptor information it
        /// received in the master device's available spectrum request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deviceDesc")]
        public virtual DeviceDescriptor DeviceDesc { get; set; } 

        /// <summary>Identifies what kind of resource this is. Value: the fixed string
        /// "spectrum#pawsGetSpectrumResponse".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The database may return a constraint on the allowed maximum contiguous bandwidth (in Hertz). A
        /// regulatory domain may require the database to return this parameter. When this parameter is present in the
        /// response, the device must apply this constraint to its spectrum-selection logic to ensure that no single
        /// block of spectrum has bandwidth that exceeds this value.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxContiguousBwHz")]
        public virtual System.Nullable<double> MaxContiguousBwHz { get; set; } 

        /// <summary>The database may return a constraint on the allowed maximum total bandwidth (in Hertz), which need
        /// not be contiguous. A regulatory domain may require the database to return this parameter. When this
        /// parameter is present in the available spectrum response, the device must apply this constraint to its
        /// spectrum-selection logic to ensure that total bandwidth does not exceed this value.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxTotalBwHz")]
        public virtual System.Nullable<double> MaxTotalBwHz { get; set; } 

        /// <summary>For regulatory domains that require a spectrum-usage report from devices, the database must return
        /// true for this parameter if the spectrum schedule list is not empty; otherwise, the database will either
        /// return false or omit this parameter. If this parameter is present and its value is true, the device must
        /// send a spectrum use notify message to the database; otherwise, the device must not send the
        /// notification.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("needsSpectrumReport")]
        public virtual System.Nullable<bool> NeedsSpectrumReport { get; set; } 

        /// <summary>The database should return ruleset information, which identifies the applicable regulatory
        /// authority and ruleset for the available spectrum response. If included, the device must use the
        /// corresponding ruleset to interpret the response. Values provided in the returned ruleset information, such
        /// as maxLocationChange, take precedence over any conflicting values provided in the ruleset information
        /// returned in a prior initialization response sent by the database to the device.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rulesetInfo")]
        public virtual RulesetInfo RulesetInfo { get; set; } 

        /// <summary>The available spectrum response must contain a spectrum schedule list. The list may be empty if
        /// spectrum is not available. The database may return more than one spectrum schedule to represent future
        /// changes to the available spectrum. How far in advance a schedule may be provided depends on the applicable
        /// regulatory domain.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("spectrumSchedules")]
        public virtual System.Collections.Generic.IList<SpectrumSchedule> SpectrumSchedules { get; set; } 

        /// <summary>The database includes a timestamp of the form YYYY-MM-DDThh:mm:ssZ (Internet timestamp format per
        /// RFC3339) in its available spectrum response. The timestamp should be used by the device as a reference for
        /// the start and stop times specified in the response spectrum schedules.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("timestamp")]
        public virtual string Timestamp { get; set; } 

        /// <summary>The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).
        ///
        /// Required field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The PAWS version. Must be exactly 1.0.
        ///
        /// Required field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("version")]
        public virtual string Version { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The initialization request message allows the master device to initiate exchange of capabilities with
    /// the database.</summary>
    public class PawsInitRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The DeviceDescriptor parameter is required. If the database does not support the device or any of
        /// the rulesets specified in the device descriptor, it must return an UNSUPPORTED error code in the error
        /// response.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deviceDesc")]
        public virtual DeviceDescriptor DeviceDesc { get; set; } 

        /// <summary>A device's geolocation is required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("location")]
        public virtual GeoLocation Location { get; set; } 

        /// <summary>The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).
        ///
        /// Required field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The PAWS version. Must be exactly 1.0.
        ///
        /// Required field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("version")]
        public virtual string Version { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The initialization response message communicates database parameters to the requesting
    /// device.</summary>
    public class PawsInitResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A database may include the databaseChange parameter to notify a device of a change to its database
        /// URI, providing one or more alternate database URIs. The device should use this information to update its
        /// list of pre-configured databases by (only) replacing its entry for the responding database with the list of
        /// alternate URIs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("databaseChange")]
        public virtual DbUpdateSpec DatabaseChange { get; set; } 

        /// <summary>Identifies what kind of resource this is. Value: the fixed string
        /// "spectrum#pawsInitResponse".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The rulesetInfo parameter must be included in the response. This parameter specifies the regulatory
        /// domain and parameters applicable to that domain. The database must include the authority field, which
        /// defines the regulatory domain for the location specified in the INIT_REQ message.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rulesetInfo")]
        public virtual RulesetInfo RulesetInfo { get; set; } 

        /// <summary>The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).
        ///
        /// Required field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The PAWS version. Must be exactly 1.0.
        ///
        /// Required field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("version")]
        public virtual string Version { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The spectrum-use notification message which must contain the geolocation of the Device and parameters
    /// required by the regulatory domain.</summary>
    public class PawsNotifySpectrumUseRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Device descriptor information is required in the spectrum-use notification message.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deviceDesc")]
        public virtual DeviceDescriptor DeviceDesc { get; set; } 

        /// <summary>The geolocation of the master device (the device that is sending the spectrum-use notification) to
        /// the database is required in the spectrum-use notification message.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("location")]
        public virtual GeoLocation Location { get; set; } 

        /// <summary>A spectrum list is required in the spectrum-use notification. The list specifies the spectrum that
        /// the device expects to use, which includes frequency ranges and maximum power levels. The list may be empty
        /// if the device decides not to use any of spectrum. For consistency, the psdBandwidthHz value should match
        /// that from one of the spectrum elements in the corresponding available spectrum response previously sent to
        /// the device by the database. Note that maximum power levels in the spectrum element must be expressed as
        /// power spectral density over the specified psdBandwidthHz value. The actual bandwidth to be used (as computed
        /// from the start and stop frequencies) may be different from the psdBandwidthHz value. As an example, when
        /// regulatory rules express maximum power spectral density in terms of maximum power over any 100 kHz band,
        /// then the psdBandwidthHz value should be set to 100 kHz, even though the actual bandwidth used can be 20
        /// kHz.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("spectra")]
        public virtual System.Collections.Generic.IList<SpectrumMessage> Spectra { get; set; } 

        /// <summary>The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).
        ///
        /// Required field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The PAWS version. Must be exactly 1.0.
        ///
        /// Required field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("version")]
        public virtual string Version { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>An empty response to the notification.</summary>
    public class PawsNotifySpectrumUseResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Identifies what kind of resource this is. Value: the fixed string
        /// "spectrum#pawsNotifySpectrumUseResponse".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).
        ///
        /// Required field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The PAWS version. Must be exactly 1.0.
        ///
        /// Required field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("version")]
        public virtual string Version { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The registration request message contains the required registration parameters.</summary>
    public class PawsRegisterRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Antenna characteristics, including its height and height type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("antenna")]
        public virtual AntennaCharacteristics Antenna { get; set; } 

        /// <summary>A DeviceDescriptor is required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deviceDesc")]
        public virtual DeviceDescriptor DeviceDesc { get; set; } 

        /// <summary>Device owner information is required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deviceOwner")]
        public virtual DeviceOwner DeviceOwner { get; set; } 

        /// <summary>A device's geolocation is required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("location")]
        public virtual GeoLocation Location { get; set; } 

        /// <summary>The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).
        ///
        /// Required field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The PAWS version. Must be exactly 1.0.
        ///
        /// Required field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("version")]
        public virtual string Version { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The registration response message simply acknowledges receipt of the request and is otherwise
    /// empty.</summary>
    public class PawsRegisterResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A database may include the databaseChange parameter to notify a device of a change to its database
        /// URI, providing one or more alternate database URIs. The device should use this information to update its
        /// list of pre-configured databases by (only) replacing its entry for the responding database with the list of
        /// alternate URIs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("databaseChange")]
        public virtual DbUpdateSpec DatabaseChange { get; set; } 

        /// <summary>Identifies what kind of resource this is. Value: the fixed string
        /// "spectrum#pawsRegisterResponse".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).
        ///
        /// Required field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The PAWS version. Must be exactly 1.0.
        ///
        /// Required field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("version")]
        public virtual string Version { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The device validation request message.</summary>
    public class PawsVerifyDeviceRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A list of device descriptors, which specifies the slave devices to be validated, is
        /// required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deviceDescs")]
        public virtual System.Collections.Generic.IList<DeviceDescriptor> DeviceDescs { get; set; } 

        /// <summary>The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).
        ///
        /// Required field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The PAWS version. Must be exactly 1.0.
        ///
        /// Required field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("version")]
        public virtual string Version { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The device validation response message.</summary>
    public class PawsVerifyDeviceResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A database may include the databaseChange parameter to notify a device of a change to its database
        /// URI, providing one or more alternate database URIs. The device should use this information to update its
        /// list of pre-configured databases by (only) replacing its entry for the responding database with the list of
        /// alternate URIs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("databaseChange")]
        public virtual DbUpdateSpec DatabaseChange { get; set; } 

        /// <summary>A device validities list is required in the device validation response to report whether each slave
        /// device listed in a previous device validation request is valid. The number of entries must match the number
        /// of device descriptors listed in the previous device validation request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deviceValidities")]
        public virtual System.Collections.Generic.IList<DeviceValidity> DeviceValidities { get; set; } 

        /// <summary>Identifies what kind of resource this is. Value: the fixed string
        /// "spectrum#pawsVerifyDeviceResponse".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).
        ///
        /// Required field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The PAWS version. Must be exactly 1.0.
        ///
        /// Required field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("version")]
        public virtual string Version { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>This contains parameters for the ruleset of a regulatory domain that is communicated using the
    /// initialization and available-spectrum processes.</summary>
    public class RulesetInfo : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The regulatory domain to which the ruleset belongs is required. It must be a 2-letter country code.
        /// The device should use this to determine additional device behavior required by the associated regulatory
        /// domain.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("authority")]
        public virtual string Authority { get; set; } 

        /// <summary>The maximum location change in meters is required in the initialization response, but optional
        /// otherwise. When the device changes location by more than this specified distance, it must contact the
        /// database to get the available spectrum for the new location. If the device is using spectrum that is no
        /// longer available, it must immediately cease use of the spectrum under rules for database-managed spectrum.
        /// If this value is provided within the context of an available-spectrum response, it takes precedence over the
        /// value within the initialization response.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxLocationChange")]
        public virtual System.Nullable<double> MaxLocationChange { get; set; } 

        /// <summary>The maximum duration, in seconds, between requests for available spectrum. It is required in the
        /// initialization response, but optional otherwise. The device must contact the database to get available
        /// spectrum no less frequently than this duration. If the new spectrum information indicates that the device is
        /// using spectrum that is no longer available, it must immediately cease use of those frequencies under rules
        /// for database-managed spectrum. If this value is provided within the context of an available-spectrum
        /// response, it takes precedence over the value within the initialization response.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxPollingSecs")]
        public virtual System.Nullable<int> MaxPollingSecs { get; set; } 

        /// <summary>The identifiers of the rulesets supported for the device's location. The database should include at
        /// least one applicable ruleset in the initialization response. The device may use the ruleset identifiers to
        /// determine parameters to include in subsequent requests. Within the context of the available-spectrum
        /// responses, the database should include the identifier of the ruleset that it used to determine the
        /// available-spectrum response. If included, the device must use the specified ruleset to interpret the
        /// response. If the device does not support the indicated ruleset, it must not operate in the spectrum governed
        /// by the ruleset.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rulesetIds")]
        public virtual System.Collections.Generic.IList<string> RulesetIds { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Available spectrum can be logically characterized by a list of frequency ranges and permissible power
    /// levels for each range.</summary>
    public class SpectrumMessage : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The bandwidth (in Hertz) for which permissible power levels are specified. For example, FCC
        /// regulation would require only one spectrum specification at 6MHz bandwidth, but Ofcom regulation would
        /// require two specifications, at 0.1MHz and 8MHz. This parameter may be empty if there is no available
        /// spectrum. It will be present otherwise.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("bandwidth")]
        public virtual System.Nullable<double> Bandwidth { get; set; } 

        /// <summary>The list of frequency ranges and permissible power levels. The list may be empty if there is no
        /// available spectrum, otherwise it will be present.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("frequencyRanges")]
        public virtual System.Collections.Generic.IList<FrequencyRange> FrequencyRanges { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The spectrum schedule element combines an event time with spectrum profile to define a time period in
    /// which the profile is valid.</summary>
    public class SpectrumSchedule : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The event time expresses when the spectrum profile is valid. It will always be present.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("eventTime")]
        public virtual EventTime EventTime { get; set; } 

        /// <summary>A list of spectrum messages representing the usable profile. It will always be present, but may be
        /// empty when there is no available spectrum.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("spectra")]
        public virtual System.Collections.Generic.IList<SpectrumMessage> Spectra { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A vCard-in-JSON message that contains only the fields needed for PAWS: - fn: Full name of an individual
    /// - org: Name of the organization - adr: Address fields - tel: Telephone numbers - email: Email
    /// addresses</summary>
    public class Vcard : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The street address of the entity.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("adr")]
        public virtual VcardAddress Adr { get; set; } 

        /// <summary>An email address that can be used to reach the contact.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("email")]
        public virtual VcardTypedText Email { get; set; } 

        /// <summary>The full name of the contact person. For example: John A. Smith.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fn")]
        public virtual string Fn { get; set; } 

        /// <summary>The organization associated with the registering entity.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("org")]
        public virtual VcardTypedText Org { get; set; } 

        /// <summary>A telephone number that can be used to call the contact.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("tel")]
        public virtual VcardTelephone Tel { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The structure used to represent a street address.</summary>
    public class VcardAddress : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The postal code associated with the address. For example: 94423.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("code")]
        public virtual string Code { get; set; } 

        /// <summary>The country name. For example: US.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("country")]
        public virtual string Country { get; set; } 

        /// <summary>The city or local equivalent portion of the address. For example: San Jose.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("locality")]
        public virtual string Locality { get; set; } 

        /// <summary>An optional post office box number.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pobox")]
        public virtual string Pobox { get; set; } 

        /// <summary>The state or local equivalent portion of the address. For example: CA.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("region")]
        public virtual string Region { get; set; } 

        /// <summary>The street number and name. For example: 123 Any St.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("street")]
        public virtual string Street { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The structure used to represent a telephone number.</summary>
    public class VcardTelephone : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A nested telephone URI of the form: tel:+1-123-456-7890.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("uri")]
        public virtual string Uri { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The structure used to represent an organization and an email address.</summary>
    public class VcardTypedText : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The text string associated with this item. For example, for an org field: ACME, inc. For an email
        /// field: smith@example.com.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("text")]
        public virtual string Text { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }
}
